{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Chaper 2 - N-armed Bandits\n",
    "### Deep Reinforcement Learning _in Action_"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### Listing 2.1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_best_action(actions):\n",
    "\tbest_action = 0\n",
    "\tmax_action_value = 0\n",
    "\tfor i in range(len(actions)): #A \n",
    "\t\tcur_action_value = get_action_value(actions[i]) #B\n",
    "\t\tif cur_action_value > max_action_value:\n",
    "\t\t\tbest_action = i\n",
    "\t\t\tmax_action_value = cur_action_value\n",
    "\treturn best_action"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### Listing 2.2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Matplotlib is building the font cache; this may take a moment.\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "from scipy import stats\n",
    "import random\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "n = 10\n",
    "probs = np.random.rand(n) #A\n",
    "eps = 0.1"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### Listing 2.3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_reward(prob, n=10):\n",
    "    reward = 0;\n",
    "    for i in range(n):\n",
    "        if random.random() < prob:\n",
    "            reward += 1\n",
    "    return reward"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "reward_test = [get_reward(0.7) for _ in range(2000)]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "6.9825"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.mean(reward_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "22"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sum = 0\n",
    "x = [4,5,6,7]\n",
    "for j in range(len(x)): \n",
    "\tsum = sum + x[j]\n",
    "sum"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(array([  4.,  29.,  62., 236., 397., 497., 458., 253.,  64.]),\n",
       " array([ 2.        ,  2.88888889,  3.77777778,  4.66666667,  5.55555556,\n",
       "         6.44444444,  7.33333333,  8.22222222,  9.11111111, 10.        ]),\n",
       " <BarContainer object of 9 artists>)"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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HgAAAICT2QoU3t7eWr58uZo1a6b3339fzZs31xdffKFz587laJeUlKRFixYpIiJCU6dOVUREhJYvXy4vLy9bxQMAAABwrnzNoahSpcp1j6enp8s0TW3ZskV9+vSRJJUpU0Y+Pj5KTU11BAzTNGUYho4ePaqWLVvKMIxCe7gdAAAAgFsvX4HiyJEjMgzjmvMkDMOQYRiS/m+y9NmzZ3X27Nlc7STp5MmTjnABAAAAwHXlK1BUrFiRH/8AAAAAcsn3CAUAAAAA/JWtSdkAAAAAijcCBQAAAADLCBQAAAAALMvXHIob2bNnj3766SedOHFCZ86ckSQFBQXpzjvv1L333qtatWoVRjcAAAAAihjLgeLChQuaPn263nvvPZ06deq6bcPCwjRixAg988wz8vX1tdolAAAAgCLG0i1PcXFxql27tkaPHq1Tp07JNM3rbidOnNDf//531alTRxs3bizszwAAAADASQo8QvHNN9+od+/eysjIcDzEztfXV40aNVKNGjVUunRpSVJSUpL27t2rbdu26cKFCzJNU0ePHlXr1q315ZdfqkuXLoX6QQAAAADcegUKFD///LP69u2r9PR0SVLNmjU1duxY9e7dW56ennmek56eri+++EJvvvmmdu/erfT0dPXt21fr169XvXr17H8CAAAAAE5ToFuehg8frosXL8owDD399NPasWOH+vbte80wIUmenp7q27evtm/frmeffVaSdPHiRQ0fPtxe5QAAAACcLt+BIjY2VuvWrZNhGHrsscc0Y8YMeXl55bsjT09PffDBB3r88cdlmqbWrVun2NhYS0UDAAAAKBryHSi+/vprSZK/v7/ee+89yx2+9957CggIkCQtXbrU8nUAAAAAOF++A8UPP/wgwzDUrVs3BQYGWu6wTJky6t69u0zTZIQCAAAAcHH5DhTZz5po3ry57U6bNWsmSTp58qTtawEAAABwnnwHirNnz0qSypYta7vTO+64Q5J07tw529cCAAAA4Dz5DhR+fn6Srjxfwq7k5OQc1wQAAADgmvIdKEJCQiRJu3fvtt1p9jWCg4NtXwsAAACA8+Q7UDRt2lSmaeqrr75SZmam5Q4zMjL01VdfyTAMx1wKAAAAAK4p34Gic+fOkqTjx4/r7bffttzhlClTdOzYMUnSgw8+aPk6AAAAAJwv34HioYceUpUqVWSapl566SUtWLCgwJ0tWrRI//jHP2QYhipXrqyHHnqowNcAAAAAUHTkO1B4eHho8uTJkqSsrCw99thjeuaZZxzLyV7PqVOn9Oyzz+rRRx913C41efJkubu7WywbAAAAQFHgUZDGPXv21EsvvaQJEybIMAx99NFHmjVrltq3b6+WLVuqevXqKl26tKQrq0HFx8dr/fr1iomJUWZmpkzTlCT94x//UM+ePQv9wwAAAAC4tQoUKCTp9ddfl4+Pj15++WVlZmYqIyNDq1at0qpVq655TnaQcHd31+uvv67Ro0dbrxgAAABAkZHvW56uNnr0aP3000/q2LGjpCuB4XqbJHXs2FE//fQTYQIAAAC4jRR4hCJbs2bNtGLFCsXHx2vVqlVav369jh8/7niidmBgoMqXL6+WLVuqY8eOql69eqEVDQAAAKBosBwoslWvXl3Vq1fXsGHDCqMeAAAAAC7E0i1PAAAAACARKAAAAADYQKAAAAAAYBmBAgAAAIBlBAoAAAAAlhEoAAAAAFhGoAAAAABgGYECAAAAgGUECgAAAACWESgAAAAAWEagAAAAAGAZgQIAAACAZR52L7Bu3TpJUr169VS6dGm7lwMAAADgQmyPULRp00Zt27bV5s2bC6MeAAAAAC7E9gjF9cTHx2vBggWSpHHjxt3MrgAAAAA4Qb5HKDIzMwt88b179+qVV17Rq6++WuBzAQAAABR9+R6hKF26tFq1auW4xalx48YyDONm1gYAAACgiMt3oEhNTdXKlSu1cuVKSZK/v79atWrlOE64AAAAAIqffAeKDz/8UDExMVq7dq1Onz6t5ORkLVu2zHG8T58+atasmVq0aKGIiAg1b978phQMAAAAoOgwTNM0C3rSr7/+qpiYGMXExGjZsmUyDEPZl8keqXBzc1NISIhOnjwpwzD0559/qkyZMoVbfRGQkpKigIAAJScny9/f39nlALCh0ujlzi4BAIqlI5MinV0C/qIgv3EtrfJUp04d1alTR8OHD5eb25V53YMGDVJqaqri4uJ07NgxZWZmOsKEaZoqW7as6tatq7Zt26pt27Zq3bo1P8ABAAAAF1doT8ru06eP5s+fr99//13Hjx/XokWL1Lt3b5mmKcMwlJWVpZ9//lnvvfeeevTooaCgIDVr1qywugcAAADgBPkOFGvXrtXly5fz1TYsLEy9evVSv379HPu+/vprjRw5UvXr15d0ZRnarVu3FrBcAAAAAEVJvm95at++vUqUKKGIiAi1a9dO7du3V5MmTfLdUZcuXdSlSxdJ0rlz57R27Vr98MMPBS4YAAAAQNFRoFueLl26pLVr12rcuHFq2bKlAgMDHcf27duntLS0fF2nTJky6tmzp6ZOnVqwagEAAAAUKfkOFPv379fMmTPVr18/3XnnnTJNU+fPn3es6jR8+HAFBASoefPm+tvf/qYvv/xSCQkJN61wAAAAAM5nadlYSTp48KDWrl2rp59+OseysVLOh9xlT8r+7LPP1LZtW4WEhNivughh2Vjg9sGysQDgHCwbW/Tc9GVjJalq1aqqWrWqnn76aUnS9OnTVaJECa1fv14//fST4uPjHWFCkmOCdvXq1dW2bVu1a9dObdq0UVBQkNUSAAAAADiZ5UDxV5UrV1bHjh0VFRUlSTp79qymTZum8ePHyzAMeXh4KD09XXv37lV8fLxmzJghNzc3paenF1YJAAAAAG6xQgsUfxUYGKh69eo53iclJenHH3/UmjVrtGbNGu3YsUNZWVk3q3sAAAAAt8BNCxR/VbJkSXXs2FEdO3aUdOW+LJaNBQAAAFyb7SdlV6xYURUrVlTJkiULdJ6/v7+6detmud9169apa9euCgsLk2EYWrJkSY7jpmlq3LhxKleunEqWLKkOHTpo//79OdqcPXtW/fr1k7+/v0qXLq0nnnhCFy5csFwTAAAAUNzYDhRHjhzR4cOH1apVq8KoJ99SU1NVv359TZs2Lc/jkydP1tSpUzVjxgxt2rRJPj4+6tSpky5duuRo069fP+3evVurV6/WsmXLtG7dOsckcwAAAAA3dlNveapYsaJjknZh69y5szp37pznMdM09e6772rs2LHq3r27JGnOnDkKCQnRkiVL9Oijj+q3337TihUrtGXLFjVu3FiS9P777+vBBx/UW2+9pbCwsJtSNwAAAHA7sT1CcT333HOPZs2apVmzZt3MbnI5fPiwEhIS1KFDB8e+gIAANWvWTHFxcZKkuLg4lS5d2hEmJKlDhw5yc3PTpk2brnnttLQ0paSk5NgAAACA4uqmBgpnyX5C918fohcSEuI4lpCQoODg4BzHPTw8FBgYeN0nfE+cOFEBAQGOrUKFCoVcPQAAAOA6bstAcTONGTNGycnJju3YsWPOLgkAAABwmtsyUISGhkqSEhMTc+xPTEx0HAsNDdXp06dzHM/IyNDZs2cdbfLi7e0tf3//HBsAAABQXN2WgaJy5coKDQ1VTEyMY19KSoo2bdqkiIgISVJERISSkpK0bds2R5s1a9YoKytLzZo1u+U1AwAAAK7olj3YrrBduHBBBw4ccLw/fPiwdu7cqcDAQFWsWFEjRozQG2+8oWrVqqly5cp6+eWXFRYWph49ekiSatasqQceeEBPPfWUZsyYofT0dA0dOlSPPvooKzwBAAAA+eSygWLr1q1q27at4/2oUaMkSVFRUZo9e7b+/ve/KzU1VU8//bSSkpJ07733asWKFSpRooTjnM8++0xDhw5V+/bt5ebmpl69emnq1Km3/LMAAAAArsowTdN0dhGuLCUlRQEBAUpOTmY+BeDiKo1e7uwSAKBYOjIp0tkl4C8K8hv3tpxDAQAAAODWIFAAAAAAsIxAAQAAAMAyAgUAAAAAywgUAAAAACwjUAAAAACwjEABAAAAwDICBQAAAADLCBQAAAAALCNQAAAAALCMQAEAAADAMgIFAAAAAMsIFAAAAAAsI1AAAAAAsIxAAQAAAMAyAgUAAAAAywgUAAAAACwjUAAAAACwjEABAAAAwDICBQAAAADLPJxdAAAAAIq3SqOXO7uEIunIpEhnl5AvBAqgmOE/2gAAoDBxyxMAAAAAywgUAAAAACwjUAAAAACwjEABAAAAwDICBQAAAADLCBQAAAAALCNQAAAAALCMQAEAAADAMgIFAAAAAMsIFAAAAAAsI1AAAAAAsIxAAQAAAMAyAgUAAAAAywgUAAAAACwjUAAAAACwjEABAAAAwDICBQAAAADLCBQAAAAALCNQAAAAALCMQAEAAADAMgIFAAAAAMsIFAAAAAAsI1AAAAAAsMzD2QUAN0ul0cudXQIAAMBtjxEKAAAAAJYRKAAAAABYRqAAAAAAYBmBAgAAAIBlBAoAAAAAlhEoAAAAAFhGoAAAAABgGYECAAAAgGUECgAAAACWESgAAAAAWEagAAAAAGAZgQIAAACAZQQKAAAAAJYRKAAAAABYRqAAAAAAYBmBAgAAAIBlBAoAAAAAlhEoJE2bNk2VKlVSiRIl1KxZM23evNnZJQEAAAAuwcPZBTjbggULNGrUKM2YMUPNmjXTu+++q06dOik+Pl7BwcHOLu+GKo1e7uwSAAAAUIwV+xGKd955R0899ZQGDRqkWrVqacaMGSpVqpT++9//Ors0AAAAoMgr1iMUly9f1rZt2zRmzBjHPjc3N3Xo0EFxcXF5npOWlqa0tDTH++TkZElSSkrKzS32GrLSLjqlXwAAANxczvp9eXXfpmnesG2xDhR//vmnMjMzFRISkmN/SEiI9u7dm+c5EydO1Kuvvpprf4UKFW5KjQAAACieAt51dgXS+fPnFRAQcN02xTpQWDFmzBiNGjXK8T4rK0tnz55VUFCQDMO4pbWkpKSoQoUKOnbsmPz9/W9p37cDvj/r+O6s47uzju/OHr4/6/jurOO7s87Z351pmjp//rzCwsJu2LZYB4o77rhD7u7uSkxMzLE/MTFRoaGheZ7j7e0tb2/vHPtKly59s0rMF39/f/4ltYHvzzq+O+v47qzju7OH7886vjvr+O6sc+Z3d6ORiWzFelK2l5eXGjVqpJiYGMe+rKwsxcTEKCIiwomVAQAAAK6hWI9QSNKoUaMUFRWlxo0bq2nTpnr33XeVmpqqQYMGObs0AAAAoMgr9oGiT58++uOPPzRu3DglJCSoQYMGWrFiRa6J2kWRt7e3xo8fn+sWLOQP3591fHfW8d1Zx3dnD9+fdXx31vHdWedK351h5mctKAAAAADIQ7GeQwEAAADAHgIFAAAAAMsIFAAAAAAsI1AAAAAAsIxA4YImTpyoJk2ayM/PT8HBwerRo4fi4+OdXZZLmD59uurVq+d4SExERIS+++47Z5flkiZNmiTDMDRixAhnl+ISXnnlFRmGkWOrUaOGs8tyGSdOnNDjjz+uoKAglSxZUnXr1tXWrVudXVaRV6lSpVz/3BmGoejoaGeXVuRlZmbq5ZdfVuXKlVWyZElVrVpVr7/+uljLJv/Onz+vESNGKDw8XCVLllSLFi20ZcsWZ5dV5Kxbt05du3ZVWFiYDMPQkiVLchw3TVPjxo1TuXLlVLJkSXXo0EH79+93TrHXQKBwQbGxsYqOjtbGjRu1evVqpaenq2PHjkpNTXV2aUVe+fLlNWnSJG3btk1bt25Vu3bt1L17d+3evdvZpbmULVu26D//+Y/q1avn7FJcSu3atXXq1CnH9tNPPzm7JJdw7tw5tWzZUp6envruu++0Z88evf322ypTpoyzSyvytmzZkuOfudWrV0uSHn74YSdXVvT985//1PTp0/Xvf/9bv/32m/75z39q8uTJev/9951dmst48skntXr1as2dO1e7du1Sx44d1aFDB504ccLZpRUpqampql+/vqZNm5bn8cmTJ2vq1KmaMWOGNm3aJB8fH3Xq1EmXLl26xZVehwmXd/r0aVOSGRsb6+xSXFKZMmXMjz76yNlluIzz58+b1apVM1evXm22bt3aHD58uLNLcgnjx48369ev7+wyXNKLL75o3nvvvc4u47YwfPhws2rVqmZWVpazSynyIiMjzcGDB+fY17NnT7Nfv35Oqsi1XLx40XR3dzeXLVuWY3/Dhg3Nl156yUlVFX2SzMWLFzveZ2VlmaGhoea//vUvx76kpCTT29vb/Pzzz51QYd4YobgNJCcnS5ICAwOdXIlryczM1Pz585WamqqIiAhnl+MyoqOjFRkZqQ4dOji7FJezf/9+hYWFqUqVKurXr5+OHj3q7JJcwtdff63GjRvr4YcfVnBwsO655x7NnDnT2WW5nMuXL+vTTz/V4MGDZRiGs8sp8lq0aKGYmBjt27dPkvTzzz/rp59+UufOnZ1cmWvIyMhQZmamSpQokWN/yZIlGZ0tgMOHDyshISHHn7kBAQFq1qyZ4uLinFhZTsX+SdmuLisrSyNGjFDLli1Vp04dZ5fjEnbt2qWIiAhdunRJvr6+Wrx4sWrVquXsslzC/PnztX37du6BtaBZs2aaPXu2qlevrlOnTunVV19Vq1at9Ouvv8rPz8/Z5RVphw4d0vTp0zVq1Cj94x//0JYtW/Tcc8/Jy8tLUVFRzi7PZSxZskRJSUkaOHCgs0txCaNHj1ZKSopq1Kghd3d3ZWZmasKECerXr5+zS3MJfn5+ioiI0Ouvv66aNWsqJCREn3/+ueLi4nTXXXc5uzyXkZCQIEkKCQnJsT8kJMRxrCggULi46Oho/frrr6T9Aqhevbp27typ5ORkffHFF4qKilJsbCyh4gaOHTum4cOHa/Xq1bn+xgk3dvXfatarV0/NmjVTeHi4Fi5cqCeeeMKJlRV9WVlZaty4sd58801J0j333KNff/1VM2bMIFAUwMcff6zOnTsrLCzM2aW4hIULF+qzzz7TvHnzVLt2be3cuVMjRoxQWFgY/9zl09y5czV48GDdeeedcnd3V8OGDdW3b19t27bN2aWhkHHLkwsbOnSoli1bprVr16p8+fLOLsdleHl56a677lKjRo00ceJE1a9fX++9956zyyrytm3bptOnT6thw4by8PCQh4eHYmNjNXXqVHl4eCgzM9PZJbqU0qVL6+6779aBAwecXUqRV65cuVyBv2bNmtwyVgC///67vv/+ez355JPOLsVlvPDCCxo9erQeffRR1a1bV/3799fIkSM1ceJEZ5fmMqpWrarY2FhduHBBx44d0+bNm5Wenq4qVao4uzSXERoaKklKTEzMsT8xMdFxrCggULgg0zQ1dOhQLV68WGvWrFHlypWdXZJLy8rKUlpamrPLKPLat2+vXbt2aefOnY6tcePG6tevn3bu3Cl3d3dnl+hSLly4oIMHD6pcuXLOLqXIa9myZa6lsfft26fw8HAnVeR6Zs2apeDgYEVGRjq7FJdx8eJFubnl/Jnk7u6urKwsJ1Xkunx8fFSuXDmdO3dOK1euVPfu3Z1dksuoXLmyQkNDFRMT49iXkpKiTZs2Fan5n9zy5IKio6M1b948LV26VH5+fo576AICAlSyZEknV1e0jRkzRp07d1bFihV1/vx5zZs3Tz/88INWrlzp7NKKPD8/v1zzdHx8fBQUFMT8nXx4/vnn1bVrV4WHh+vkyZMaP3683N3d1bdvX2eXVuSNHDlSLVq00JtvvqlHHnlEmzdv1ocffqgPP/zQ2aW5hKysLM2aNUtRUVHy8OCP/fzq2rWrJkyYoIoVK6p27drasWOH3nnnHQ0ePNjZpbmMlStXyjRNVa9eXQcOHNALL7ygGjVqaNCgQc4urUi5cOFCjtHqw4cPa+fOnQoMDFTFihU1YsQIvfHGG6pWrZoqV66sl19+WWFhYerRo4fziv4rZy8zhYKTlOc2a9YsZ5dW5A0ePNgMDw83vby8zLJly5rt27c3V61a5eyyXBbLxuZfnz59zHLlypleXl7mnXfeafbp08c8cOCAs8tyGd98841Zp04d09vb26xRo4b54YcfOrskl7Fy5UpTkhkfH+/sUlxKSkqKOXz4cLNixYpmiRIlzCpVqpgvvfSSmZaW5uzSXMaCBQvMKlWqmF5eXmZoaKgZHR1tJiUlObusImft2rV5/q6LiooyTfPK0rEvv/yyGRISYnp7e5vt27cvcv8+G6bJIx8BAAAAWMMcCgAAAACWESgAAAAAWEagAAAAAGAZgQIAAACAZQQKAAAAAJYRKAAAAABYRqAAAAAAYBmBAgAAJ2nTpo0Mw5BhGM4uBQAs83B2AQCAm+N6P1JLlSqlwMBA1apVS+3bt1dUVJRCQkJuYXUAgNsFT8oGgNtUQf7W28/PT++//76ioqJuYkX4qzZt2ig2NlaSxB/HAFwVIxQAUAwsXrw4x/vU1FTt3btX8+bN06FDh3T+/HkNGjRIgYGB6tq1q5OqBAC4IkYoAOA2dfUIxbX+U5+WlqZ+/frpyy+/lCRVr15de/fuvSX1gREKALcHJmUDQDHm7e2tGTNmyNPTU5IUHx9PoAAAFAiBAgCKuTvuuEO1a9d2vN+3b9912ycnJ+vtt99Whw4dFBYWJm9vbwUGBqpRo0YaM2aMTpw4ked5GRkZ8vPzk2EYatmy5TWv369fP8fKR9WrV79mu+joaEe73bt35zp+/PhxffDBB3r00UdVq1Yt+fn5ydPTU3fccYeaNWumMWPG6NixY9f9rJJUqVIlGYahSpUqSboyqjNt2jS1adNG5cqVk7u7u+PY1c6dO6eXX35ZdevWla+vr0qXLq0GDRrotdde05kzZ27YLwC4DBMAcFuS5NhupHnz5o628+fPv2a7hQsXmoGBgTmu/detRIkS5uzZs/M8v3PnzqYk09PT0zx//nyebcqVK5fjesePH8+zXY0aNUxJZkhISK5ja9euNQ3DuG6dkkwvLy/zo48+uu53Ex4ebkoyw8PDzcOHD5t16tTJdZ3w8PAc52zevNkMCQm5Zr8VKlQwf/75Z7N169b5/v8IAIoqJmUDQDGXkZGh+Ph4x/uKFSvm2W7mzJl65plnZJqmvLy81L17d913330KCQnRhQsX9NNPP2nevHm6dOmSBg4cKC8vL/Xt2zfHNdq1a6fvvvtO6enp+vHHH9W5c+ccx3/77TedOnUqx741a9aof//+OfadOnXKcWtW27Ztc9V66dIlmaap6tWrq23btqpVq5buuOMOeXh4KCEhQevWrdOSJUt0+fJlPfXUUwoJCVGXLl2u+z2lpaWpZ8+e+vXXX9W8eXP17t1b5cuX19mzZ3OMkBw+fFgdO3ZUUlKSpCvzUgYOHKjKlSvrzz//1FdffaU1a9aoR48eCggIuG6fAOASnJ1oAAA3h/I5QjFlyhRHu4CAADMlJSVXm59//tn08vIyJZnVqlUzf/vttzyvtWfPHjMsLMyUZPr5+ZlnzpzJcXzr1q2Ovv72t7/lOn/atGmmJLNkyZJmgwYNTEnmwIEDc7X77LPPHNf58MMPcx0/cuSIuXPnzut+7h07dpjBwcGOz5SVlZVnu+wRiuxt0qRJ171ux44dHW0feeQRMy0tLVebd955J9eoBQC4KuZQAEAxdPHiRW3fvl1Dhw7V3/72N8f+5557Tn5+frnav/LKK7p8+bJKlCihb7/9VjVq1MjzujVr1tTs2bMlSefPn9fMmTNzHL/nnntUpkwZSVdGHv4qe1+LFi0coxdr1669ZjvpyqjHX4WHh6t+/fp51pitQYMGevPNNyVJ+/fv14YNG67bXpK6d++uF1988ZrHf/nlF61atUrSlZGe2bNny8vLK1e7kSNHqnfv3jfsDwBcAYECAIqB7MnL2ZuPj48aNWqkadOmKSsrS5L0+OOPa/z48bnOTUpK0tKlSyVJDz30kO66667r9nX//ferXLlykqSVK1fmOObm5qbWrVtLkn7++WedPXvWccw0Tf3www+SroSE7KDw+++/6+DBgzmukx0oKlasqKpVq+brO8jLvffe63i9cePGG7Z/7rnnrnv8q6++crweMmSISpYsec22L7zwQj4qBICijzkUAFDMhYaGas6cObr//vvzPL5+/XpH6PD29taSJUtueE0/Pz+dOnVKe/bsyXWsbdu2WrJkibKysrR27Vr16tVL0pWAkb36Ufv27VWvXj15eXnp8uXLWrNmjSM4/P777zp8+LCkvEcnrrZz5059+umniouL0/79+5WSkqK0tLQ82x4/fvy613J3d1eLFi2u22bz5s2O1+3bt79u2yZNmsjPz0/nz5+/bjsAKOoIFABQDFz9pOy0tDQdPXpUX375pTZt2qSEhAS98cYbatq0aZ6ThI8cOeJ4PXv2bMctTflx9QhEtqtDwJo1axyBIvvWJn9/fzVu3Fju7u5q3ry51q1bpzVr1uipp55ynJPXta6WkZGh6OhozZw5M98PjEtJSbnu8aCgIJUoUeK6bU6ePOl4faORHMMwVLVqVe3cuTNf9QFAUUWgAIBioEePHrn2vfDCC3r33Xc1cuRIrVu3Tr169dKqVavk5pbzbtjs1YqsSE9Pz7WvTp06Cg4O1unTp3OEg+zX9913n9zd3SVdCQzr1q3LMY8iP4Fi+PDh+vDDDyVJnp6eeuCBB9S0aVOVL19ePj4+jgf5nT59Ws8884wkKTMz87qf5Xq3L2W7cOGC43WpUqVu2N7Hx+eGbQCgqGMOBQAUYyNGjNBjjz0mSYqJidF7772Xq42vr6/j9dSpU2WaZoG2vLRp00aStHfvXp08eVKZmZlat26dpJwhIft1YmKiY2nW7HBRrVo13XnnnbmufezYMc2YMUOSdOedd2r37t36+uuvNXbsWA0cOFAPP/ywevTooR49elz3AXtWXP1dXbx48YbtU1NTC7V/AHAGAgUAFHNvvfWW42/f83qKc/ny5R2v8/Nk6fz4621PW7duddxydPXcg2bNmjn+pn/NmjWKj493PIn7WqMT33//vWPOx+jRo1WtWrVr1pE9F6OwXB1wDhw4cN22pmnq0KFDhdo/ADgDgQIAirly5cppyJAhkq7c3jRp0qQcx1u1aiXDMCRJK1asKJQ+/xooskcdypYtq7p16zqOeXl5OUYRrm7312tcLSEhwfH6RvMYvvvuu4IXfx1NmzZ1vM5rWdyrbdmy5YbzNgDAFRAoAAB6/vnn5e3tLUn64IMPlJiY6DgWHBzseCbErl279Pnnn9vur1q1ao6RjzVr1jh+fLdp08YRXrJlB4fY2Fh9//33kq5MaM7rCdlSznkJ1xslOHTokD755BPrHyIPDz30kOP19OnTdenSpWu2ffvttwu1bwBwFgIFAEDlypXT4MGDJV259/+voxQTJkxwPKDtySefvGGoOHv2rN555x1HAMhLdiD4/fffHSMPeS21mh0ozp0753geRp06dVS2bNk8r9ukSRPH67feeivXLVySdPToUXXt2rXQ5zDUq1dPHTt2lHTlcw0ePDjPienvv/++Fi5cWKh9A4CzGGZ+19MDALiUq/+mPz//qf/9999VrVo1paenq0SJEjp48KDCwsIcx2fPnq0nnnjCMT+hQYMG6tq1q6pVq6aSJUsqOTlZBw4c0ObNm7Vu3TplZGRo7ty5evzxx/Psb/bs2Ro0aFCOffv27cs15yEzM1OBgYE5bg8aPny43n333Wt+lubNm2vTpk2SpDvuuENPP/20atasqczMTG3cuFFz585VamqqBg4c6FgGNyoqKs8lcStVqqTff/9d4eHhOZbQvZbDhw+rYcOGjtWxatSooYEDB6py5co6c+aMvvzyS8XExKhy5coKCAhwLBvLH8cAXJYJALgtSXJs+TVo0CDHOdHR0bmOr1ixwgwLC8tx7Wtt3t7e5nfffXfNvo4cOZKjfYUKFa7ZtkuXLjnaLl269Lqf4/Dhw2blypWvW9+wYcPMQ4cOOd5HRUXlea3w8HBTkhkeHn7dPq+2adMmMzg4+Jp9V6hQwfz555/N1q1bF/j/IwAoarjlCQDgMGbMGMczID766KNcqzp16tRJhw4d0n//+1/17t1blStXlq+vrzw8PFSmTBndc889GjhwoObMmaOEhAQ98MAD1+wrPDxcVapUcby/1pwIKecEbHd3d7Vu3fq6n6NSpUrasWOHXnnlFdWrV0+lSpVSqVKlVKVKFT3++ONau3atpk6dmmu+RmFp2rSp9u7dq5deekm1a9dWqVKl5O/vr3r16umVV17Rjh07VK9evZvSNwDcatzyBAAAAMAyRigAAAAAWEagAAAAAGAZgQIAAACAZQQKAAAAAJYRKAAAAABYRqAAAAAAYBmBAgAAAIBlBAoAAAAAlhEoAAAAAFhGoAAAAABgGYECAAAAgGUECgAAAACWESgAAAAAWEagAAAAAGAZgQIAAACAZf8fQ2459iyXYAcAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 900x500 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(9,5))\n",
    "plt.xlabel(\"Reward\",fontsize=22)\n",
    "plt.ylabel(\"# Observations\",fontsize=22)\n",
    "plt.hist(reward_test,bins=9)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### Listing 2.4"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 10 actions x 2 columns\n",
    "# Columns: Count #, Avg Reward\n",
    "record = np.zeros((n,2))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_best_arm(record):\n",
    "    arm_index = np.argmax(record[:,1],axis=0)\n",
    "    return arm_index"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "def update_record(record,action,r):\n",
    "    new_r = (record[action,0] * record[action,1] + r) / (record[action,0] + 1)\n",
    "    record[action,0] += 1\n",
    "    record[action,1] = new_r\n",
    "    return record"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### Listing 2.5"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.PathCollection at 0x7f917cb4a3e0>"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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2LFjio+PV2pqKmEeAAAACBKfp9lMnDhRubm5+u677xQXF6d169bpm2++Uf/+/fXHP/4xEDUCAAAA8MDnMF9YWKiHH35YVqtVERERqqqqUkZGhmbOnKnf/va3gagRAAAAgAc+h/moqCjX8pSpqanav3+/JMlms+nAgQP+rQ4AAABAg3yeM9+3b19t3LhRPXr00HXXXaepU6fq2LFj+utf/6rs7OxA1AgAAADAA59H5p9++mmlp6dLkp566im1b99e48eP19GjRzVnzhy/FwgAAADAM593gG1N2AEWAAAAbZG3Odfnkfk33nhDxcXFLSoOAAAAQMv5HOZnzJih7t2768ILL9QvfvELvfbaa9qzZ08gagMAAADQCJ/D/O7du7V//37NmDFD8fHx+uMf/6hevXqpa9euGj16dCBqBAAAAOBBi+bMnz59Wp9//rneeecdvf322zIMQ+fOnfNnfY0K9Zx5h9PQhuIyHamoVGpirAZmpijCagl6HQAAAGhbvM25Pi9N+fHHH2vFihVasWKFtmzZossuu0zXXXed3n33XV177bUtKtpM8otKNH3xDpXYK13H0m2xmpabpRHZ6SGsDAAAAOHC55F5q9WqTp066eGHH9Y999yj5OTkAJXWtFCNzOcXlWj8/ALV/cHVjMnPHt2PQA8AAIBmC9hqNrNmzdLgwYM1c+ZMXX755fr5z3+uOXPm6KuvvmpRwWbhcBqavnhHvSAvyXVs+uIdcjhNu+InAAAATMLnMD9hwgS99957OnbsmPLz83XNNdcoPz9f2dnZ6tq1ayBqbFU2FJe5Ta2py5BUYq/UhuKy4BUFAACAsOTznHlJMgxDW7Zs0YoVK/TZZ59p9erVcjqd6tSpk7/ra3WOVDQc5JvTDgAAAGgun8N8bm6u1qxZo/LycvXp00c//OEPdffdd+vaa68N6fz5YElNjPVrOwAAAKC5fA7zl156qe6991794Ac/kM1mC0RNrdrAzBSl22JVaq/0OG/eIinNdn6ZSgAAACCQfA7zzz77rOv/KysrFRsbXiPQEVaLpuVmafz8Alkkt0Bfs5rNtNws1psHAABAwPl8AazT6dQTTzyhCy64QO3atdPXX38tSZoyZYpef/11vxfYGo3ITtfs0f2UZnM/kUmzxbIsJQAAAILG55H5J598UvPmzdPMmTN19913u45nZ2frueee01133eXXAlurEdnpGpaVxg6wAAAACBmfw/xbb72lOXPmaMiQIbrvvvtcx/v06aMvv/zSr8W1dhFWi3Iu6RDqMgAAABCmfJ5mc/DgQXXv3r3ecafTqbNnz/qlKAAAAABN8znMZ2Vl6fPPP693/N1331Xfvn39UhQAAACApvk8zWbq1KkaM2aMDh48KKfTqffee0+7du3SW2+9pSVLlgSiRgAAAAAe+DwyP3LkSC1evFiffPKJEhISNHXqVO3cuVOLFy/WsGHDAlEjAAAAAA8shmF42vuoWTZt2qQBAwb46+GaVF5eLpvNJrvdrqSkpKA9LwAAABBI3uZcn0fmT548qTNnzrgdKywsVG5urgYNGuR7pQAAAACaxeswf+DAAeXk5Mhms8lms2nSpEk6ffq0fvnLX2rQoEFKSEjQF198EchaAQAAANTi9QWwjzzyiCorK/X888/rvffe0/PPP6/PP/9cgwYN0t69e9W1a9dA1gkAAACgDq/D/KpVq/Tee+/p6quv1m233aa0tDSNGjVKEyZMCGB5AAAAABri9TSbw4cPKzMzU5KUmpqq+Ph43XjjjX4r5JlnnpHFYuHkAAAAAPCSTxfAWq1Wt/+Pjo72SxEbN27UK6+8ot69e/vl8QAAAIBw4HWYNwxDPXv2VEpKilJSUnTy5En17dvX9X3Nl69OnjypUaNG6dVXX1X79u19vj8AAAAQrryeMz937tyAFJCXl6ebb75ZQ4cO1ZNPPtlo26qqKlVVVbm+Ly8vD0hNAAAAgBl4HebHjBnj9ydfuHChCgoKtHHjRq/az5gxQ9OnT/d7HQAAAIAZ+bxplL8cOHBADz30kN5++23FxsZ6dZ/HHntMdrvd9XXgwIEAVwkAAAC0XhbDMIxQPPH777+vW2+9VREREa5jDodDFotFVqtVVVVVbrd54u02twAAAICZeJtzvZ5m429DhgzRtm3b3I6NHTtWl156qR599NEmgzwAAAAQ7kIW5hMTE5Wdne12LCEhQR06dKh3HAAAAEB9IZszDwAAAKBlfB6ZnzRpksfjFotFsbGx6t69u0aOHNmsNedXrFjh830AAACAcOXzBbA/+tGPVFBQIIfDoV69ekmSvvrqK0VEROjSSy/Vrl27ZLFYtHr1amVlZQWk6BpcAAsAAIC2yNuc6/M0m5EjR2ro0KE6dOiQNm/erM2bN+vbb7/VsGHDdMcdd+jgwYO69tprNXHixBa9AAAAAACN83lk/oILLtCyZcvqjbpv375dN9xwgw4ePKiCggLdcMMNOnbsmF+LrYuReQAAALRFARuZt9vtOnLkSL3jR48eVXl5uSQpOTlZ1dXVvj40AAAAAB80a5rNuHHjtGjRIn377bf69ttvtWjRIt1111265ZZbJEkbNmxQz549/V0rAAAAgFp8nmZz8uRJTZw4UW+99ZbOnTsnSYqMjNSYMWP05z//WQkJCSosLJQkXXnllf6u1w3TbAAAANAWeZtzfQ7zNU6ePKmvv/5aknTxxRerXbt2zau0BQjzAAAAaIsCNmd+/vz5On36tNq1a6fevXurd+/eIQnyAAAAQLjzOcxPnDhRqamp+vnPf66lS5fK4XAEoi4AAAAATfA5zJeUlGjhwoWyWCy67bbblJ6erry8PH3xxReBqA8AAABAA5o9Z16STp8+rUWLFmnBggX65JNP1LVrV+3du9ef9TWKOfMAAABoi7zNuZEteZL4+HgNHz5c3333nb755hvt3LmzJQ8HAAAAwAc+T7ORzo/Iv/3227rpppt0wQUX6LnnntOtt96q7du3+7s+AAAAAA3weWT+Zz/7mZYsWaL4+HjddtttmjJlinJycgJRGwAAAIBG+BzmIyIi9Pe//13Dhw9XRESE221FRUXKzs72W3EAAAAAGuZzmH/77bfdvq+oqNA777yj1157TZs3b2apSgAAACBImjVnXpJWrVqlMWPGKD09XX/84x91/fXXa926df6sDQAAAEAjfBqZLy0t1ZtvvqnXX39d5eXluu2221RVVaX3339fWVlZgaoRAAAAgAdej8zn5uaqV69e2rp1q5577jkdOnRIL7zwQiBrAwAAANAIr0fmP/roIz344IMaP368evToEciaAAAAAHjB65H51atXq6KiQv3799egQYP04osv6tixY4GsDQAAAEAjvA7zV199tV599VWVlJTo3nvv1cKFC9WlSxc5nU4tW7ZMFRUVgawTAAAAQB0WwzCM5t55165dev311/XXv/5VJ06c0LBhw/Thhx/6s75GlZeXy2azyW63KykpKWjPCwAAAASStzm32UtTSlKvXr00c+ZMffvtt3rnnXda8lAAAAAAfNSikflQY2QeAAAAbVFQRuYBAAAAhA5hHgAAADApwjwAAABgUoR5AAAAwKQI8wAAAIBJEeYBAAAAkyLMAwAAACZFmAcAAABMijAPAAAAmBRhHgAAADApwjwAAABgUoR5AAAAwKQI8wAAAIBJEeYBAAAAkyLMAwAAACZFmAcAAABMijAPAAAAmBRhHgAAADApwjwAAABgUoR5AAAAwKQI8wAAAIBJEeYBAAAAkyLMAwAAACZFmAcAAABMijAPAAAAmBRhHgAAADApwjwAAABgUoR5AAAAwKQI8wAAAIBJEeYBAAAAkyLMAwAAACZFmAcAAABMijAPAAAAmBRhHgAAADApwjwAAABgUoR5AAAAwKQI8wAAAIBJEeYBAAAAkyLMAwAAACZFmAcAAABMijAPAAAAmBRhHgAAADApwjwAAABgUoR5AAAAwKQI8wAAAIBJhTTMz5gxQ1dddZUSExOVmpqqW265Rbt27QplSQAAAIBphDTMr1y5Unl5eVq3bp2WLVums2fP6oYbbtCpU6dCWRYAAABgChbDMIxQF1Hj6NGjSk1N1cqVK3Xttdc22b68vFw2m012u11JSUlBqBAAAAAIPG9zbquaM2+32yVJKSkpIa4EAAAAaP0iQ11ADafTqQkTJmjw4MHKzs722KaqqkpVVVWu78vLy4NVHgAAANDqtJqR+by8PBUVFWnhwoUNtpkxY4ZsNpvrKyMjI4gVAgAAAK1Lq5gz/8ADD+iDDz7QqlWrlJmZ2WA7TyPzGRkZzJkHAABAm+LtnPmQTrMxDEO//vWvtWjRIq1YsaLRIC9JMTExiomJCVJ1AAAAQOsW0jCfl5enBQsW6IMPPlBiYqJKS0slSTabTXFxcaEsDQAAAGj1QjrNxmKxeDw+d+5c3XnnnU3en6UpAQAA0BaZZpoNAAAAgOZpNavZAAAAAPANYR4AAAAwKcI8AAAAYFKEeQAAAMCkCPMAAACASRHmAQAAAJMizAMAAAAmRZgHAAAATIowDwAAAJgUYR4AAAAwKcI8AAAAYFKEeQAAAMCkCPMAAACASRHmAQAAAJMizAMAAAAmRZgHAAAATIowDwAAAJgUYR4AAAAwKcI8AAAAYFKEeQAAAMCkCPMAAACASRHmAQAAAJMizAMAAAAmRZgHAAAATIowDwAAAJgUYR4AAAAwKcI8AAAAYFKEeQAAAMCkCPMAAACASRHmAQAAAJMizAMAAAAmRZgHAAAATIowDwAAAJgUYR4AAAAwKcI8AAAAYFKEeQAAAMCkCPMAAACASRHmAQAAAJMizAMAAAAmRZgHAAAATIowDwAAAJgUYR4AAAAwKcI8AAAAYFKEeQAAAMCkCPMAAACASRHmAQAAAJMizAMAAAAmRZgHAAAATIowDwAAAJgUYR4AAAAwKcI8AAAAYFKEeQAAAMCkCPMAAACASRHmAQAAAJMizAMAAAAmRZgHAAAATIowDwAAAJgUYR4AAAAwKcI8AAAAYFKEeQAAAMCkCPMAAACASRHmAQAAAJMizAMAAAAmRZgHAAAATIowDwAAAJgUYR4AAAAwKcI8AAAAYFKEeQAAAMCkCPMAAACASRHmAQAAAJOKDHUBZuVwGtpQXKYjFZVKTYzVwMwURVgtoS4LAAAAYaRVhPmXXnpJzz77rEpLS9WnTx+98MILGjhwYKjLalB+UYmmL96hEnul61i6LVbTcrM0Ijs9hJUBAAAgnIR8ms3f/vY3TZo0SdOmTVNBQYH69Omj4cOH68iRI6EuzaP8ohKNn1/gFuQlqdReqfHzC5RfVBKiygAAABBuQh7mZ82apbvvvltjx45VVlaWXn75ZcXHx+uNN94IdWn1OJyGpi/eIcPDbTXHpi/eIYfTUwsAAADAv0Ia5qurq7V582YNHTrUdcxqtWro0KFau3ZtvfZVVVUqLy93+wqmDcVl9UbkazMkldgrtaG4LHhFAQAAIGyFNMwfO3ZMDodDnTt3djveuXNnlZaW1ms/Y8YM2Ww211dGRkawSpUkHaloOMg3px0AAADQEiGfZuOLxx57THa73fV14MCBoD5/amKsX9sBAAAALRHS1Ww6duyoiIgIHT582O344cOHlZaWVq99TEyMYmJiglVePQMzU5Rui1WpvdLjvHmLpDTb+WUqAQAAgEAL6ch8dHS0+vfvr+XLl7uOOZ1OLV++XDk5OSGszLMIq0XTcrMknQ/utdV8Py03i/XmAQAAEBQhn2YzadIkvfrqq5o3b5527typ8ePH69SpUxo7dmyoS/NoRHa6Zo/upzSb+1SaNFusZo/uxzrzAAAACJqQbxp1++236+jRo5o6dapKS0t15ZVXKj8/v95Fsa3JiOx0DctKYwdYAAAAhJTFMAzTLopeXl4um80mu92upKSkUJcDAAAA+IW3OTfk02wAAAAANA9hHgAAADApwjwAAABgUoR5AAAAwKQI8wAAAIBJEeYBAAAAkyLMAwAAACZFmAcAAABMijAPAAAAmBRhHgAAADCpyFAX0BKGYUg6v90tAAAA0FbU5NuavNsQU4f5iooKSVJGRkaIKwEAAAD8r6KiQjabrcHbLUZTcb8VczqdOnTokBITE2WxWIL+/OXl5crIyNCBAweUlJQU9OdH6ND34Yl+D1/0ffii78NXqPveMAxVVFSoS5cuslobnhlv6pF5q9Wqrl27hroMJSUl8QYPU/R9eKLfwxd9H77o+/AVyr5vbES+BhfAAgAAACZFmAcAAABMijDfAjExMZo2bZpiYmJCXQqCjL4PT/R7+KLvwxd9H77M0vemvgAWAAAACGeMzAMAAAAmRZgHAAAATIowDwAAAJgUYR4AAAAwKcJ8M7300ku66KKLFBsbq0GDBmnDhg2hLgkttGrVKuXm5qpLly6yWCx6//333W43DENTp05Venq64uLiNHToUO3evdutTVlZmUaNGqWkpCQlJyfrrrvu0smTJ4P4KuCrGTNm6KqrrlJiYqJSU1N1yy23aNeuXW5tKisrlZeXpw4dOqhdu3b66U9/qsOHD7u12b9/v26++WbFx8crNTVVjzzyiM6dOxfMlwIfzZ49W71793ZtCJOTk6OPPvrIdTv9Hj6eeeYZWSwWTZgwwXWM/m+bHn/8cVksFrevSy+91HW7GfudMN8Mf/vb3zRp0iRNmzZNBQUF6tOnj4YPH64jR46EujS0wKlTp9SnTx+99NJLHm+fOXOm/vKXv+jll1/W+vXrlZCQoOHDh6uystLVZtSoUdq+fbuWLVumJUuWaNWqVbrnnnuC9RLQDCtXrlReXp7WrVunZcuW6ezZs7rhhht06tQpV5uJEydq8eLF+sc//qGVK1fq0KFD+u///m/X7Q6HQzfffLOqq6v1xRdfaN68eXrzzTc1derUULwkeKlr16565plntHnzZm3atEnXX3+9Ro4cqe3bt0ui38PFxo0b9corr6h3795ux+n/tuvyyy9XSUmJ62v16tWu20zZ7wZ8NnDgQCMvL8/1vcPhMLp06WLMmDEjhFXBnyQZixYtcn3vdDqNtLQ049lnn3UdO3HihBETE2O88847hmEYxo4dOwxJxsaNG11tPvroI8NisRgHDx4MWu1omSNHjhiSjJUrVxqGcb6fo6KijH/84x+uNjt37jQkGWvXrjUMwzCWLl1qWK1Wo7S01NVm9uzZRlJSklFVVRXcF4AWad++vfHaa6/R72GioqLC6NGjh7Fs2TLjuuuuMx566CHDMHjft2XTpk0z+vTp4/E2s/Y7I/M+qq6u1ubNmzV06FDXMavVqqFDh2rt2rUhrAyBVFxcrNLSUrd+t9lsGjRokKvf165dq+TkZA0YMMDVZujQobJarVq/fn3Qa0bz2O12SVJKSookafPmzTp79qxb31966aW68MIL3fr+iiuuUOfOnV1thg8frvLyctcoL1o3h8OhhQsX6tSpU8rJyaHfw0ReXp5uvvlmt36WeN+3dbt371aXLl108cUXa9SoUdq/f78k8/Z7ZEie1cSOHTsmh8Ph1omS1LlzZ3355ZchqgqBVlpaKkke+73mttLSUqWmprrdHhkZqZSUFFcbtG5Op1MTJkzQ4MGDlZ2dLel8v0ZHRys5Odmtbd2+9/S7UXMbWq9t27YpJydHlZWVateunRYtWqSsrCwVFhbS723cwoULVVBQoI0bN9a7jfd92zVo0CC9+eab6tWrl0pKSjR9+nT94Ac/UFFRkWn7nTAPAP+Rl5enoqIit/mTaNt69eqlwsJC2e12vfvuuxozZoxWrlwZ6rIQYAcOHNBDDz2kZcuWKTY2NtTlIIhuvPFG1//37t1bgwYNUrdu3fT3v/9dcXFxIays+Zhm46OOHTsqIiKi3pXNhw8fVlpaWoiqQqDV9G1j/Z6WllbvIuhz586prKyM3w0TeOCBB7RkyRJ99tln6tq1q+t4WlqaqqurdeLECbf2dfve0+9GzW1ovaKjo9W9e3f1799fM2bMUJ8+ffT888/T723c5s2bdeTIEfXr10+RkZGKjIzUypUr9Ze//EWRkZHq3Lkz/R8mkpOT1bNnT+3Zs8e073vCvI+io6PVv39/LV++3HXM6XRq+fLlysnJCWFlCKTMzEylpaW59Xt5ebnWr1/v6vecnBydOHFCmzdvdrX59NNP5XQ6NWjQoKDXDO8YhqEHHnhAixYt0qeffqrMzEy32/v376+oqCi3vt+1a5f279/v1vfbtm1zO5lbtmyZkpKSlJWVFZwXAr9wOp2qqqqi39u4IUOGaNu2bSosLHR9DRgwQKNGjXL9P/0fHk6ePKm9e/cqPT3dvO/7kFx2a3ILFy40YmJijDfffNPYsWOHcc899xjJycluVzbDfCoqKowtW7YYW7ZsMSQZs2bNMrZs2WJ88803hmEYxjPPPGMkJycbH3zwgbF161Zj5MiRRmZmpnHmzBnXY4wYMcLo27evsX79emP16tVGjx49jDvuuCNULwleGD9+vGGz2YwVK1YYJSUlrq/Tp0+72tx3333GhRdeaHz66afGpk2bjJycHCMnJ8d1+7lz54zs7GzjhhtuMAoLC438/HyjU6dOxmOPPRaKlwQvTZ482Vi5cqVRXFxsbN261Zg8ebJhsViMjz/+2DAM+j3c1F7NxjDo/7bq4YcfNlasWGEUFxcba9asMYYOHWp07NjROHLkiGEY5ux3wnwzvfDCC8aFF15oREdHGwMHDjTWrVsX6pLQQp999pkhqd7XmDFjDMM4vzzllClTjM6dOxsxMTHGkCFDjF27drk9xvHjx4077rjDaNeunZGUlGSMHTvWqKioCMGrgbc89bkkY+7cua42Z86cMe6//36jffv2Rnx8vHHrrbcaJSUlbo+zb98+48YbbzTi4uKMjh07Gg8//LBx9uzZIL8a+GLcuHFGt27djOjoaKNTp07GkCFDXEHeMOj3cFM3zNP/bdPtt99upKenG9HR0cYFF1xg3H777caePXtct5ux3y2GYRih+UwAAAAAQEswZx4AAAAwKcI8AAAAYFKEeQAAAMCkCPMAAACASRHmAQAAAJMizAMAAAAmRZgHAAAATIowDwDQm2++qeTk5FCXAQDwEWEeAMLEnXfeKYvFIovFoujoaHXv3l2///3vde7cuVCXBgBopshQFwAACJ4RI0Zo7ty5qqqq0tKlS5WXl6eoqCilp6eHujQAQDMwMg8AYSQmJkZpaWnq1q2bxo8fr6FDh+rDDz+s127v3r0aOXKkOnfurHbt2umqq67SJ5984rr997//vbKzs+vd78orr9SUKVMkSStWrNDAgQOVkJCg5ORkDR48WN98803gXhwAhCHCPACEsbi4OFVXV9c7fvLkSd10001avny5tmzZohEjRig3N1f79++XJI0bN047d+7Uxo0bXffZsmWLtm7dqrFjx+rcuXO65ZZbdN1112nr1q1au3at7rnnHlkslqC9NgAIB0yzAYAwZBiGli9frn/961/69a9/Xe/2Pn36qE+fPq7vn3jiCS1atEgffvihHnjgAXXt2lXDhw/X3LlzddVVV0mS5s6dq+uuu04XX3yxysrKZLfb9eMf/1iXXHKJJOmyyy4LzosDgDDCyDwAhJElS5aoXbt2io2N1Y033qjbb79djz/+eL12J0+e1G9+8xtddtllSk5OVrt27bRz507XyLwk3X333XrnnXdUWVmp6upqLViwQOPGjZMkpaSk6M4779Tw4cOVm5ur559/XiUlJcF6mQAQNgjzABBGfvSjH6mwsFC7d+/WmTNnNG/ePCUkJNRr95vf/EaLFi3S008/rc8//1yFhYW64oor3Kbk5ObmKiYmRosWLdLixYt19uxZ/b//9/9ct8+dO1dr167VNddco7/97W/q2bOn1q1bF5TXCQDhgmk2ABBGEhIS1L179ybbrVmzRnfeeaduvfVWSedH6vft2+fWJjIyUmPGjNHcuXMVHR2tn/3sZ4qLi3Nr07dvX/Xt21ePPfaYcnJytGDBAl199dV+ez0AEO4I8wCAenr06KH33ntPubm5slgsmjJlipxOZ712v/rVr1xz4desWeM6XlxcrDlz5ugnP/mJunTpol27dmn37t365S9/GbTXAADhgDAPAKhn1qxZGjdunK655hp17NhRjz76qMrLy+u169Gjh6655hqVlZVp0KBBruPx8fH68ssvNW/ePB0/flzp6enKy8vTvffeG8yXAQBtnsUwDCPURQAAzMkwDPXo0UP333+/Jk2aFOpyACDsMDIPAGiWo0ePauHChSotLdXYsWNDXQ4AhCXCPACgWVJTU9WxY0fNmTNH7du3D3U5ABCWCPMAgGZhliYAhB7rzAMAAAAmRZgHAAAATIowDwAAAJgUYR4AAAAwKcI8AAAAYFKEeQAAAMCkCPMAAACASRHmAQAAAJMizAMAAAAm9f8BU0vLJaR3tVYAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 900x500 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig,ax = plt.subplots(1,1)\n",
    "ax.set_xlabel(\"Plays\")\n",
    "ax.set_ylabel(\"Avg Reward\")\n",
    "fig.set_size_inches(9,5)\n",
    "rewards = [0]\n",
    "for i in range(500):\n",
    "    if random.random() > 0.2:\n",
    "        choice = get_best_arm(record)\n",
    "    else:\n",
    "        choice = np.random.randint(10)\n",
    "    r = get_reward(probs[choice])\n",
    "    record = update_record(record,choice,r)\n",
    "    mean_reward = ((i+1) * rewards[-1] + r)/(i+2)\n",
    "    rewards.append(mean_reward)\n",
    "ax.scatter(np.arange(len(rewards)),rewards)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### Listing 2.6"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "def softmax(av, tau=1.12):\n",
    "    softm = ( np.exp(av / tau) / np.sum( np.exp(av / tau) ) )\n",
    "    return softm"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "probs = np.random.rand(n)\n",
    "record = np.zeros((n,2))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.PathCollection at 0x7f917cbb7e50>"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAvMAAAHACAYAAAAvA+dJAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/H5lhTAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA9lElEQVR4nO3deXxU9b3/8fdMVhLIhAAhQbYoAQ2RCCgQ1yogoI1o771uUBGtWoSqoL3K/VUi6m286vXWumDVCraKVK1ooUhFERBkk0AhgBQwyDYxhshkgSSQOb8/aKZZJslMMjMnJ3k9H488Hsw53znzmZxE3/PNd7EZhmEIAAAAgOXYzS4AAAAAQMsQ5gEAAACLIswDAAAAFkWYBwAAACyKMA8AAABYFGEeAAAAsCjCPAAAAGBRhHkAAADAosLNLqA13G63jh49qi5dushms5ldDgAAABAQhmGotLRUvXr1kt3eeP+7pcP80aNH1adPH7PLAAAAAILi0KFD6t27d6PnLR3mu3TpIunMm4yLizO5GgAAACAwSkpK1KdPH0/ebYylw3zN0Jq4uDjCPAAAANqd5oaSMwEWAAAAsCjCPAAAAGBRhHkAAADAogjzAAAAgEUR5gEAAACLIswDAAAAFkWYBwAAACyKMA8AAABYFGEeAAAAsChL7wALAABgpmq3oU35xSosrVD32Ci5DUPrvynSkR9Oymaz6ayunXTxOd016uxuCrM3vZMn0BKEeQAAgHpqh/TELtEa3q+rNucXa93+7z1B/eSpan25/5hKK043ea2XPt+vyDCbMno7dFbXGCXHRyu+U6SOn6zS0Vqhf1RKN0nSxvxjchuSo1NEgzZ8MEB9NsMwDLOLaKmSkhI5HA65XC7FxcWZXQ4AAGijasJ5geukisoqVXyiSs7jFV6Dta8h3Sz1PxgkxESpe5coJcVFa0RKQkCDfrXb0Ib9x7T+myJJNo1MSZCkOn998PY9rH3MebyCDyIt4GvOJcwDAAC/1Q55jfUij0rpJrvdpqKySiV28S9oNnf9+mGxqUCZe/AHrf7H96o45Q7yd8V8MZF2jR/cUz0dnep8HxJiopQQG6ni8kodP3lKhg/f05OnqgP+fWvuLxSt+XBS8zOzbv/3OtrIB4j6bZr6uSmpOCWbbMo8p5spH0II8wAAtDH1x1fLJhWWVKi4vEoJnf0LL/WHgQS6R7b+a9UO1gWuCv11h1OVp/0LebFRYbrzkv66qH+3RoeSJMdH6ztXZYuuj/YnITZCj2cNVtfYqCYDeFMfPCLDbLqgT7y6xka2+MNJfEyEnvrJ+RqfnhyIt+UTwjwAwDK89cKa3SsWSNVuQy98tlevr/1GZZXVTbaNibBrcK+4Bj2XtXufvfU0+/I8bz2gzfXWBqN3FrCqVyYPC1mgJ8wDANqs2uF9b2FZs2ExNipMz/zbEF0zpFcIq2yctx72mqEktSdKHv3nUIWVXxfqVLVl/3cL4J+SHdFa+/BVIelc8DXnspoNACCgak80rBk+ktj5X0NK1u4r0tLt/g2hKK+s1r0LtypjzT7179Y54GOy1chfALz9xaAjjb8GUJfTVaFN+cXKPKeb2aV4EOYBAC1iRtD9++FS/f1wqefxS5/vr3O+9uS/muEl3ibTLdvu1H/+ebvKKv+1WsmLn+/zjK0d3r8r47YBeFVYWmF2CXUQ5gEAPqvpdf9kp1PvbD7U5nqnT1S59cFWZ6PnoyPsSoqL0oFjJ72er6o2tOnAD9p04IdglQjA4hK7RJtdQh2EeQBAsyuj+DOBsy2rOOVuNMgDgVIzGdlms+nvh138dacdSXac+e9jW0KYB4AOrLGQHhsZpssH9tDkUf3kOnFKD73/d52osm6IBwIlKsymIfU2bEqIjdTxE96XF629rnljmyw5XRXa6SxRea3fwfrrxTtdFXwwaAOys9La3MparGYDAB1I7WDx1YEflHvwuE67Lfu/AaBFosJt+tHAHuoUGe7zsp3BXibVl30DvH0wMGvp0MaWQvW2AdWWAz9Y/oNI15gI5bDOfOAR5gF0FI3thtnUJM/az23L49xhfZFh0o+HJNfpRa7f0xzI6/u7A2xNG287grYHze2We/JUtb7cf0ylFf+a8N3YTrH1v6c1/22pWZGqJStH1a6xqb9Q2Gw2HThWrm2HXK3+nkSE2WQYarKzIjrCritSu2tYvwR2gDULYR5AR+Bt5ZWmxEaF6a5LU3Tvlal6+fN9lh/njralJgQmx8c0GXRqL1FaVFapLQd/0Nq9RXV+FpsKlGYHqfYmlDsGt9ay7U796qM8FZdXNTjXVACv36khyfMB4qgPHR9tDWEeACyodu/V0eMVAeulspKYSLvOio/W3sITZpcSFLFRYbrzkv4aeXZ3FZZU1FmL320YWv9Nkdeey/q9zzU9zaNSzqx37evzWtJbG6gAZKVACXN526/CCgE8kAjzAGARHX0YTGSYlJXRS5emJjZYC76x3jkriAqzKeOfa9a31d5AwjXQdhHmAcACrB5YWyIq3KYrByVqQGKXZodQ1B+qUXyi8dU/gq32uO3aveJ2u02FJRUqKgvNREkAHYOvOZelKQHAJP/911167Yt8s8sIiPo7r9ZMNLyof4I25xdr/TdFUgtCbpjd1ui26fWD/vGTp2TUmxzsy0ofCbERejxrsLrGRtUZW8u4bQBWQM88AARI/TGe8TH/WtaufsjMLyrT3w+XmF1yq92e2U/j0pPb9PCM+vMQrDYJDkDHZIme+ccee0xz586tc2zQoEH6+uuvTaoIAPzXXnZH9dfLtw7VNUN6mV1Gs8LsNl2S2l2XpHY3uxQACDjTh9kMHjxYn376qedxeLjpJQEIovrrIXeNiWxy98T6z60/WU+qu/RY7XWkJQVlNYTa72FvYZlWfl2oU9WW/SOnJCk63K4rz03UrSP6avOBYr265htVNLLBS7IjWtlZaSHdPAUA4J3pyTk8PFxJSUlmlwEgiGrC71sbD+jzr79vNCTWqFkn/RejB3pCt7eJopHhNsmQquoF6Zc+369wu2S32Rqck86E0UevPU+OTpFePwQ09UGiPa04Ex1h148G9tBPM/vXed+XDeyh+8cMbPChi2EpAND2mDpm/rHHHtMzzzwjh8Oh6OhoZWZmKicnR3379vXavrKyUpWVlZ7HJSUl6tOnD2PmARN523mw9qTB4vIqzf5gh88bHtUWFWbTPVecrS/2FmlriNZajwyzKaO3Q2d1jfGsVrL5QLHeWJffpobQjOwfr2H9EzyTPH3960BEmE2TR/bV1YPb9jh3AOjoLLE05ccff6yysjINGjRITqdTc+fO1ZEjR5SXl6cuXbo0aO9tjL0kwjxggppx4q+s3t9sTzsCJyE2Qk9OTG8wVr25cfve/toBAGi7LBHm6zt+/Lj69eun5557TnfeeWeD8/TMA+ardht6ceU+vbRqn6oI8UFVs235hf27+TzEhV0TAaB9sMRqNvXFx8dr4MCB2rdvn9fzUVFRioqKCnFVACR64kPpR4O6657LB7QogDe1LjsAoP1pU2G+rKxM+/fv109/+lOzSwGgf/XyrthVoIUbDxLiQ+Cuy/rr/1072OwyAAAWYWqYf+ihh5SVlaV+/frp6NGjys7OVlhYmG655RYzywI6rNpDNNbuK9LynQUqb0OTPtuzxsbCAwDQFFPD/OHDh3XLLbfo2LFj6tGjhy699FJt2LBBPXr0MLMsoEOoP7b6YPEJfbD1iEor/F91Bs2LibRr/OCe6unoJCe7kAIAAsTUML9o0SIzXx7okDrqbqWhUrNqzL1XpmrLtz/U2eCKsA4ACLQ2NWYeQHAt2+7UrHe3tdux7xFhNhmGdNodukW6YiLtmpCepEtTExv0sDMRFQAQbIR5oIPIWbZLv1uTb3YZigq3adoV5zTouR7er6te/nxfs6vlRIZJWUN6KSm+kwwvO5NK0ob9x+rs7Bpht2vBlwd0/OQpr9f090MAGy8BANqKNrXOvL98XX8T6OiWbjuqGYu2Bv11IsOkoX3jte1QiSrrBfLYyDDdffnZmnFVarPrpL+4cp/mr8uvE75bu+lR/Z1qm/oQcOSHk3K6KrTTWVJnAjAbLwEAQsWSm0b5izAPNG/Z9qOavnCrgvmLPqyPQw+OO1ejzu6mMLutTnCWzqx7XnPOVzUTdM0cc94WagAAdEyEeQBatt2pexfmBvU1Xrx5qH58AcspAgAQSJbcARZA69TuEf/Hd6X6ZFdhUF/v5VuHsi46AAAmIswD7cSy7U7955+3q6wy+OvEJzuilZ2VpvHpyUF/LQAA0DjCPNAOBGulmgv6xOnSAYkamZIgu92morJKxo4DANCGEOYBi1u67WjAg3xCbISenJjOEBoAANo4wjxgUdVuQ89/+g/9duW+Vl3nvisHaMZodisFAMCKCPOABQVqJ9f7R6dq5tiBktitFAAAKyLMA21czQo1NZsZ7Txaon3fl7f6uvExEbpvdGoAKgQAAGYhzANtVM1OqL9bs18nqqqbf4KfnvrJ+QylAQDA4gjzQBu0PM+pRz7YoeMnTgX82rFRYfrf/8hgWUkAANoBwjzQxgRr19bYqDDddWmKfjF6ID3yAAC0E4R5oA2odhvalF+s5XlH9eb6gwG77k8u6KXLBiUqKY4VagAAaI8I84DJlm136lcf5am4vCqg133x5qH68QWsEw8AQHtGmAdM9N9/3aXXvgj8zq33XJ5CkAcAoAMgzAMBVDNcprC0Qt1joySbVFRW6dmISZLn/Cc7C/TXHQUBff3oCLue+48Mdm4FAKCDIMwDAdLccJnIcJvCbDadPNW6jZ68iQq3adoV5zC5FQCADoYwD7RA7Y2cjh6v0IFj5dp2yNXkc6pOG5KMgNYRGxmmuy8/WzOuSiXEAwDQARHmAT8Fcw345oTbpGuH9FLvhE66+JzuGnV2N0I8AAAdGGEe8EHNWPgVuwr0xroDptXx4qRhbPYEAAA8CPNAM5bnOTV3yS45XRWm1cCurQAAwBvCPNCE5XlOTXsrN8Aj3X3Hrq0AAKAphHmgEdVuQ498sMOUIH/loO66+/IB7NoKAACaRJgHGvHiyr0hn+Rqk/QCO7cCAAAfEeaBeqrdhr7cW6QXV+4L+Wu/dOtQNnwCAAA+I8yHQO1dQWt2AmXoRNu0bLtT//nn7SqrPB3S1+0aE6Gcn5zPBFcAAOAXwnyQeVsJJdkRreysNIJbG5OzbJd+tyY/INfqGhOuKZn91a9brIrKKnX85CkZhtQ1JlIJsZEqLj9zzCabMs/pxnrxAACgRQjzQdTYSihOV4V+/lauXm7BkAp6+YNj2fajrQ7ynaPC9Ph16UqO78R9AQAAIUGYD5Jqt6G5S3Y1uRLKjHe26kXZdM0Q33ro6eUPjmq3oV99lNeqa9gkPcs68AAAIMTsZhfQXm3KL252kyG3Id27MFfL85zNXq+ml7/+NQtcFZr2lm/XgHcbvjmm4vKWr1qT7IjWvMnszAoAAEKPnvkgKSz1fbfQuUt2aWxaUqPDMprq5Td0ple4uWvAu2XbnZr57ja/nxcdYdevrz+fITUAAMBUhPkgSewS7XNbp6tCm/KLlXlON6/nm+vlN3y4RltnxlyA//7rLr32RcvGyf/mpgvoiQcAAKYjzAfJiJQEJTuimx1qU6PAdbLRc7728i/4Mt+SvcShnAtQ86Hh1TX79PmeIr+fzxKSAACgLWHMfJCE2W3Kzkrzuf0Tf93d6Lh3X3v5/7bzOw157G9anudUtdvQ+v3H9NG2I1q//5iq3U1NxTXPsu1O/TxEcwGW5zl16f+s1C2vbfA7yIfbbZo5JlVf/WosQR4AALQZNsMw2mbK80FJSYkcDodcLpfi4uLMLserZduPasY7W9Vclq7pS/c2kXLZ9qO6d+FWv143NjJM5VXVnsfxnSI09ZL+mnFVapvpuW/ue2OTlOSI1tqHr2p1zY0tE+qrt+8cqUtSu7eqBgAAAF/5mnPpmQ+ya4b00ou3DGu2XU3InLtkl6cXvdptaN3eIj30/na/X7d2kJek4ydP6f8+3avhT65oEyvfLNvu1L0Lm/6QU3suQGtUuw098sGOFgf5ZEe0Rll0LgIAAGjfGDMfAtcMSdYr9mF68L2/q7yyutF2tcOr62RVg3HkgXD8xCn9/K1cvRLCpRTrT249VlqpX/zJ9780/G2ns1UTe19cuVfHT7Rs6UmbpOystDbz1wwAAIDaCPMh1FSQr23FrgLNX3egxT3Jvnjkgx0+L2XZ0pVmqt2GXly5T/PX5ev4yZav477gy291rKxSv7l5mNfXrXYb2rD/mNbt/15Hj1forK6ddPE53XVR/wRt3H9ML67c16LXZbIrAABo6xgzHwLVbkOX/s9Kn3vZE2IjVVxeFeSqpJljBur+MalNtvG20owv4++X5zn1yAc7Wtwj7k1UuE3TrjhH916Zqi3f/qDC0grlf1+u19fmq6zydMBeR5KuPT9Jv73F+4cHAACAYPM15xLmQ2D9/mO65bUNZpfRQHxMhLb8amyTgbypSaPxMRF6ykvP9fK8MyvUBItNCupfLe66rL/+37WDg/gKAAAATWMCbBviz26woXT8xClt2H/M67mmdp2t/fz6y0fWPC+YghXkbZJevHkoQR4AAFgGYT4E/NkNNtSmL/S+lvuGb475NCzIkPTwn7dr3b4iz9j6QE/aDZWXbh2qH1/Qy+wyAAAAfMYE2BAYkZKghNgIFZcHbvx4oBw/eaZ3fd7kYRqblqQN+4/prY0H9MnO73y+huvkaU16faMSYiOUcZYjiNUGR+eocD37H0OY6AoAACyHMfNBVHsVmG++L9fzn+01uySvbJIcMRGSoVatOmNFsVFh2vro1YoM549UAACg7fA159IzHyTeVoGJDrer4rTbxKq8M6SArjpjJf/7HxkEeQAAYFmkmCCoWQWm/tjxmiAfFR6Y5Q4TYiMDcp22oGtMhHY/Pl4PjE5VVFjwl4PsGhMR0o2zAAAAgoEwH2C+rAJTedrQtelJLX4Nm6RkR7SenJje4mu0JTZJOT85X50iw/TA2IHa9cQE/XhI8EL2A6NT9dWvxhLkAQCA5RHmA8zX1Vw25Bfr2vNbHuizs9J0zZBkvXzrUFl5X6NkR7Tm1eshD7Pb9OKtw/TizUPl71tr7gf65VuH6oGxA9kMCgAAtAuMmQ8wX9eUP1ZepZTunf2+frIjWtlZaZ7we82QXnpRNt27sOEmTcHeXKklbr+4n8YNTlZhaYUSu0RrREpCo8H6xxf0kt3u/b3VFxsZprsvP1szrkrV3/IK9KuP8ursolv/+wYAANAeEOYDzL815f2L2jPHpGrGVakNwu81Q5L1in1Ygwm3Sf8MsJL02F92qqCk0q/XC4Zxg5OVeU43n9s39t5qxHeK0NRL+tf5vlwzJFnj0pM8Kwk196EBAADAqgjzAebPmvKZZ3fXwk0HfWo7c8xA3T8mtdHz49OTNTat8QDbJTpCk17f6Psb8SI63C673aYTVdUten6y40xN/qr93gpcJ1VcXqWEzlFKims8pIfZbX59aAAAALAiwnyAhdltenJiuu5duLXJdsmOaI06p5tPbZPiojTjqgE+vXZjAbaorOW98iP6J+j+MakadfaZa2/Yf0zrvynS2n1F2nbI5dM1bDozzr+lveOEcwAAgIbazATYp556SjabTQ888IDZpbTaNUN66Z7LUxo9XzvY+tL2sesGt3qIiH/Df/4lISZC79w9SpcM6K4wu01hdpsuSe2uh8adqw+nX6qXbx2mzlFNfyb0NskVAAAArdcmeuY3b96s3/3udxoyZIjZpQTM7GvSlNG7q08TMf1p21IjUhIU3ynC7x1erx96VpMfJGrGp9f01ks2jUxJkN1uU1FZJePVAQAAgsj0MF9WVqZJkybptdde05NPPml2OQHlz0TMYE/aDLPbNPWS/vq/T/f69byxac0vn1nTW39JaveWlgcAAIAWMD3MT58+Xddee63GjBnTbJivrKxUZeW/xn6XlJQEu7xW82esd7DHhc+4KlXzvzyg4yd8651v6YRVAAAAhIapY+YXLVqk3Nxc5eTk+NQ+JydHDofD89WnT58gV9i+hNlteuon5ze7EZNNrZ+wCgAAgOAzLcwfOnRI999/v95++21FR/s2OXP27NlyuVyer0OHDgW5yvZnfHqy5k0epmRH49/zJCasAgAAWILNMAxTNgn98MMPdcMNNygsLMxzrLq6WjabTXa7XZWVlXXOeVNSUiKHwyGXy6W4uLhgl9yuVLsNz/j87rFRkk1MWAUAAGgjfM25po2ZHz16tHbs2FHn2NSpU3Xuuefq4YcfbjbIo3VYtx0AAMD6TAvzXbp0UXp6ep1jsbGx6tatW4PjAAAAABoyfTWb9qj2EBaGrQAAACBY2lSYX7VqldkltNryPKfmLtklp6vCcyyQmz8BAAAANUxdmrK9WZ7n1LS3cusEeUkqcFVo2lu5Wp7nNKkyAAAAtEeE+QCpdhuau2SXvC0NVHNs7pJdqnabsngQAAAA2iHCfIBsyi9u0CNfmyHJ6arQpvzi0BUFAACAdo0wHyCFpY0H+Za0AwAAAJpDmA+QxC6+7WLrazsAAACgOYT5ABmRkqBkR7QaW4DSpjOr2oxISQhlWQAAAGjHCPMBEma3KTsrTZIaBPqax9lZaaw3DwAAgIAhzAfQ+PRkzZs8TEmOukNpkhzRmjd5GOvMAwAAIKDa1KZR7cH49GSNTUtiB1gAAAAEHWE+CMLsNmWe083sMgAAANDOEeYDrNpt0CsPAACAkCDMB9DyPKfmLtlVZ/OoZEe0srPSGC8PAACAgGMCbIAsz3Nq2lu5DXaBLXBVaNpbuVqe5zSpMgAAALRXhPkAqHYbmrtklwwv52qOzV2yS9Vuby0AAACAliHMB8Cm/OIGPfK1GZKcrgptyi8OXVEAAABo9wjzAVBY2niQb0k7AAAAwBeE+QBI7BLdfCM/2gEAAAC+IMwHwIiUBCU7otXYApQ2nVnVZkRKQijLAgAAQDtHmA+AMLtN2VlpktQg0Nc8zs5KY715AAAABBRhPkDGpydr3uRhSnLUHUqT5IjWvMnDWGceAAAAAcemUQE0Pj1ZY9OS2AEWAAAAIUGYb4Vqt+EJ7t1joySbVFRWqcQu0frxkF6EeAAAAAQVYb6Fluc5NXfJrkbXl092RCs7K43hNQAAAAgaxsy3wPI8p6a9ldvkRlEFrgpNeytXy/OcIawMAAAAHQlh3k/VbkNzl+yS0Uy7mvNzl+xStbu51gAAAID/CPN+2pRf3GSPfG2GJKerQpvyi4NbFAAAADokwryfCkt9C/KtfQ4AAADQHMK8nxK7RDffKADPAQAAAJpDmPfTiJQEJTuiG+z06o1NZ1a1GZGSEOyyAAAA0AER5v0UZrcpOytNkpoM9DXnsrPSWG8eAAAAQUGYb4Hx6cmaN3mYkhyND59JckRr3uRhrDMPAACAoGHTqBYan56ssWlJje4AOyIlgR55AAAABBVhvhXC7DZlntPN7DIAAADQQTHMBgAAALAowjwAAABgUYR5AAAAwKII8wAAAIBFEeYBAAAAiyLMAwAAABZFmAcAAAAsijAPAAAAWBSbRgVQtdvw7AjLLrAAAAAINsJ8gCzPc2rukl1yuio8x5Id0crOStP49GQTKwMAAEB7xTCbAFie59S0t3LrBHlJKnBVaNpbuVqe5zSpMgAAALRnhPlWqnYbmrtklwwv52qOzV2yS9Vuby0AAACAlvNpmM3QoUNls/k29js3N7dVBVnNpvziBj3ytRmSnK4KbcovVuY53UJXGAAAANo9n8L89ddf7/l3RUWFXn75ZaWlpSkzM1OStGHDBu3cuVP33ntvUIpsywpLGw/yLWkHAAAA+MqnMJ+dne35989+9jPdd999euKJJxq0OXToUGCrs4DELtEBbQcAAAD4yu8x8++9955uu+22BscnT56sP//5zwEpykpGpCQo2RGtxgYh2XRmVZsRKQmhLAsAAAAdgN9hvlOnTlq3bl2D4+vWrVN0dMfrfQ6z25SdlSZJDQJ9zePsrDTWmwcAAEDA+b3O/AMPPKBp06YpNzdXI0aMkCRt3LhRb7zxhh599NGAF2gF49OTNW/ysAbrzCexzjwAAACCyGYYht9rJr777rt6/vnntXv3bknSeeedp/vvv1833nhjwAtsSklJiRwOh1wul+Li4kL62t6wAywAAAACwdec61fP/OnTp/XrX/9ad9xxR8iDuxWE2W0sPwkAAICQ8WvMfHh4uJ5++mmdPn06WPUAAAAA8JHfE2BHjx6t1atXB6MWS6p2G1q//5g+2nZE6/cfY6dXAAAAhIzfE2AnTJigRx55RDt27NDw4cMVGxtb5/x1113n87XmzZunefPm6cCBA5KkwYMHa86cOZowYYK/ZZlieZ6zwaTXZCa9AgAAIET8ngBrtzfemW+z2VRdXe3ztZYsWaKwsDClpqbKMAy9+eabeuaZZ7R161YNHjy42eebOQF2eZ5T097KVf1vXs1013mThxHoAQAA0CK+5twWrWYTTAkJCXrmmWd05513NtvWrDBf7TZ06f+srNMjX5tNZ5alXPvwVaxmAwAAAL8FZTWbYKqurtZ7772n8vJyZWZmem1TWVmpyspKz+OSkpJQlVfHpvziRoO8JBmSnK4KbcovZnUbAAAABE2Lwnx5eblWr16tgwcPqqqqqs65++67z69r7dixQ5mZmaqoqFDnzp21ePFipaWleW2bk5OjuXPntqTkgCosbTzIt6QdAAAA0BJ+D7PZunWrrrnmGp04cULl5eVKSEhQUVGRYmJilJiYqG+++cavAqqqqnTw4EG5XC69//77ev3117V69Wqvgd5bz3yfPn1CPsxm/f5juuW1Dc22e+euUfTMAwAAwG++DrPxe2nKmTNnKisrSz/88IM6deqkDRs26Ntvv9Xw4cP17LPP+l1oZGSkBgwYoOHDhysnJ0cZGRl6/vnnvbaNiopSXFxcnS8zjEhJULIjWo2NhrfpzKo2I1ISQlkWAAAAOhi/w/y2bdv04IMPym63KywsTJWVlerTp4+efvpp/dd//VerC3K73XV639uiMLtN2Vln/nJQP9DXPM7OSmPyKwAAAILK7zAfERHhWZ4yMTFRBw8elCQ5HA4dOnTIr2vNnj1ba9as0YEDB7Rjxw7Nnj1bq1at0qRJk/wtK+TGpydr3uRhSnJE1zme5IhmWUoAAACEhN8TYIcOHarNmzcrNTVVV1xxhebMmaOioiL98Y9/VHp6ul/XKiws1G233San0ymHw6EhQ4bob3/7m8aOHetvWaYYn56ssWlJ2pRfrMLSCiV2OTO0hh55AAAAhILfE2C/+uorlZaW6sorr/SE8S+//FKpqal64403lJGREaxaGzBz0ygAAAAgWCy7aZQ/CPMAAABoj4K2ms0bb7yh/Pz8VhUHAAAAoPX8DvM5OTkaMGCA+vbtq5/+9Kd6/fXXtW/fvmDUBgAAAKAJfof5vXv36uDBg8rJyVFMTIyeffZZDRo0SL1799bkyZODUSMAAAAAL1o1Zv7EiRP64osv9M477+jtt9+WYRg6ffp0IOtrEmPmAQAA0B75mnP9Xpryk08+0apVq7Rq1Spt3bpV5513nq644gq9//77uvzyy1tVNAAAAADf+R3mx48frx49eujBBx/UsmXLFB8fH4SyAAAAADTH7zHzzz33nC655BI9/fTTGjx4sG699Va9+uqr+sc//hGM+gAAAAA0olVj5nfs2KHVq1dr5cqVWrp0qRITE3X48OFA1tckxswDAACgPQramHlJMgxDW7du1apVq/T5559r7dq1crvd6tGjR4sLBgAAAOAfv8N8VlaW1q1bp5KSEmVkZOhHP/qR7rrrLl1++eWMnwcAAABCyO8wf+655+qee+7RZZddJofDEYyaAAAAAPjA7zD/zDPPeP5dUVGh6OjogBYEAAAAwDd+r2bjdrv1xBNP6KyzzlLnzp31zTffSJIeffRR/f73vw94gQAAAAC88zvMP/nkk1qwYIGefvppRUZGeo6np6fr9ddfD2hxAAAAABrnd5j/wx/+oFdffVWTJk1SWFiY53hGRoa+/vrrgBYHAAAAoHF+h/kjR45owIABDY673W6dOnUqIEUBAAAAaJ7fYT4tLU1ffPFFg+Pvv/++hg4dGpCiAAAAADTP79Vs5syZoylTpujIkSNyu9364IMPtGfPHv3hD3/Q0qVLg1EjAAAAAC/87pmfOHGilixZok8//VSxsbGaM2eOdu/erSVLlmjs2LHBqBEAAACAFzbDMIxAXeyrr77ShRdeGKjLNaukpEQOh0Mul0txcXEhe10AAAAgmHzNuX73zJeVlenkyZN1jm3btk1ZWVkaOXKk/5UCAAAAaBGfw/yhQ4eUmZkph8Mhh8OhWbNm6cSJE7rttts0cuRIxcbG6ssvvwxmrQAAAABq8XkC7C9/+UtVVFTo+eef1wcffKDnn39eX3zxhUaOHKn9+/erd+/ewawTAAAAQD0+h/k1a9bogw8+0KhRo3TjjTcqKSlJkyZN0gMPPBDE8gAAAAA0xudhNt99951SUlIkSYmJiYqJidGECROCVhgAAACApvk1AdZut9f5d2RkZMALAgAAAOAbn4fZGIahgQMHymazSTqzqs3QoUPrBHxJKi4uDmyFAAAAALzyOczPnz8/mHUAAAAA8JPPYX7KlCnBrAMAAACAn/zeNAoAAABA20CYBwAAACyKMA8AAABYFGEeAAAAsCjCPAAAAGBRPq9mU2PWrFlej9tsNkVHR2vAgAGaOHGiEhISWl0cAAAAgMbZDMMw/HnClVdeqdzcXFVXV2vQoEGSpH/84x8KCwvTueeeqz179shms2nt2rVKS0sLStE1SkpK5HA45HK5FBcXF9TXAgAAAELF15zr9zCbiRMnasyYMTp69Ki2bNmiLVu26PDhwxo7dqxuueUWHTlyRJdffrlmzpzZqjcAAAAAoGl+98yfddZZWrFiRYNe9507d+rqq6/WkSNHlJubq6uvvlpFRUUBLbY+euYBAADQHgWtZ97lcqmwsLDB8e+//14lJSWSpPj4eFVVVfl7aQAAAAB+aNEwmzvuuEOLFy/W4cOHdfjwYS1evFh33nmnrr/+eknSpk2bNHDgwEDXCgAAAKAWv4fZlJWVaebMmfrDH/6g06dPS5LCw8M1ZcoU/d///Z9iY2O1bds2SdIFF1wQ6HrrYJgNAAAA2iNfc67fYb5GWVmZvvnmG0nS2Wefrc6dO7es0lYgzAMAAKA9CtqY+bfeeksnTpxQ586dNWTIEA0ZMsSUIA8AAAB0dH6H+ZkzZyoxMVG33nqrli1bpurq6mDUBQAAAKAZfod5p9OpRYsWyWaz6cYbb1RycrKmT5+uL7/8Mhj1AQAAAGhEi8fMS9KJEye0ePFiLVy4UJ9++ql69+6t/fv3B7K+JjFmHgAAAO2Rrzk3vDUvEhMTo3HjxumHH37Qt99+q927d7fmcgAAAAD84PcwG+lMj/zbb7+ta665RmeddZZ+85vf6IYbbtDOnTsDXR8AAACARvjdM3/zzTdr6dKliomJ0Y033qhHH31UmZmZwagNAAAAQBP8DvNhYWF69913NW7cOIWFhdU5l5eXp/T09IAVBwAAAKBxfof5t99+u87j0tJSvfPOO3r99de1ZcsWlqoEAAAAQqRFY+Ylac2aNZoyZYqSk5P17LPP6qqrrtKGDRsCWRsAAACAJvjVM19QUKAFCxbo97//vUpKSnTjjTeqsrJSH374odLS0oJVIwAAAAAvfO6Zz8rK0qBBg7R9+3b95je/0dGjR/XCCy8EszYAAAAATfC5Z/7jjz/Wfffdp2nTpik1NTWYNQEAAADwgc8982vXrlVpaamGDx+ukSNH6sUXX1RRUVGrXjwnJ0cXXXSRunTposTERF1//fXas2dPq64JAAAAdBQ+h/lRo0bptddek9Pp1D333KNFixapV69ecrvdWrFihUpLS/1+8dWrV2v69OnasGGDVqxYoVOnTunqq69WeXm539cCAAAAOhqbYRhGS5+8Z88e/f73v9cf//hHHT9+XGPHjtVf/vKXFhfz/fffKzExUatXr9bll1/ebPuSkhI5HA65XC7FxcW1+HUBAACAtsTXnNvipSkladCgQXr66ad1+PBhvfPOO625lCTJ5XJJkhISEryer6ysVElJSZ0vAAAAoKNqVc98ILndbl133XU6fvy41q5d67XNY489prlz5zY4Ts88AAAA2hNfe+bbTJifNm2aPv74Y61du1a9e/f22qayslKVlZWexyUlJerTpw9hHgAAAO2Kr2Her02jgmXGjBlaunSp1qxZ02iQl6SoqChFRUWFsDIAAACg7TI1zBuGoV/84hdavHixVq1apZSUFDPLAQAAACzF1DA/ffp0LVy4UB999JG6dOmigoICSZLD4VCnTp3MLA0AAABo80wdM2+z2bwenz9/vm6//fZmn8/SlAAAAGiPLDFmvo3MvQUAAAAsqVXrzAMAAAAwD2EeAAAAsCjCPAAAAGBRhHkAAADAogjzAAAAgEUR5gEAAACLIswDAAAAFkWYBwAAACyKMA8AAABYFGEeAAAAsCjCPAAAAGBRhHkAAADAogjzAAAAgEUR5gEAAACLIswDAAAAFkWYBwAAACyKMA8AAABYFGEeAAAAsCjCPAAAAGBRhHkAAADAogjzAAAAgEUR5gEAAACLIswDAAAAFkWYBwAAACyKMA8AAABYFGEeAAAAsCjCPAAAAGBRhHkAAADAogjzAAAAgEUR5gEAAACLIswDAAAAFkWYBwAAACyKMA8AAABYFGEeAAAAsCjCPAAAAGBRhHkAAADAogjzAAAAgEUR5gEAAACLIswDAAAAFkWYBwAAACyKMA8AAABYFGEeAAAAsCjCPAAAAGBRhHkAAADAogjzAAAAgEUR5gEAAACLIswDAAAAFkWYBwAAACyKMA8AAABYFGEeAAAAsCjCPAAAAGBRhHkAAADAogjzAAAAgEUR5gEAAACLIswDAAAAFmVqmF+zZo2ysrLUq1cv2Ww2ffjhh2aWAwAAAFiKqWG+vLxcGRkZeumll8wsAwAAALCkcDNffMKECZowYYKZJQAAAACWZWqY91dlZaUqKys9j0tKSkysBgAAADCXpSbA5uTkyOFweL769OljdkkAAACAaSwV5mfPni2Xy+X5OnTokNklAQAAAKax1DCbqKgoRUVFmV0GAAAA0CZYqmceAAAAwL+Y2jNfVlamffv2eR7n5+dr27ZtSkhIUN++fU2sDAAAAGj7TA3zX331la688krP41mzZkmSpkyZogULFphUFQAAAGANpob5H/3oRzIMw8wSAAAAAMtizDwAAABgUYR5AAAAwKII8wAAAIBFEeYBAAAAiyLMAwAAABZFmAcAAAAsijAPAAAAWBRhHgAAALAowjwAAABgUYR5AAAAwKII8wAAAIBFEeYBAAAAiyLMAwAAABZFmAcAAAAsijAPAAAAWBRhHgAAALAowjwAAABgUYR5AAAAwKII8wAAAIBFEeYBAAAAiyLMAwAAABZFmAcAAAAsijAPAAAAWBRhHgAAALAowjwAAABgUYR5AAAAwKII8wAAAIBFEeYBAAAAiyLMAwAAABZFmAcAAAAsijAPAAAAWBRhHgAAALAowjwAAABgUYR5AAAAwKII8wAAAIBFEeYBAAAAiyLMAwAAABZFmAcAAAAsijAPAAAAWBRhHgAAALAowjwAAABgUYR5AAAAwKII8wAAAIBFEeYBAAAAiyLMAwAAABZFmAcAAAAsijAPAAAAWBRhHgAAALAowjwAAABgUYR5AAAAwKII8wAAAIBFEeYBAAAAiyLMAwAAABZFmAcAAAAsKtzsAqyq2m1oU36xCksrlNglWiNSEhRmt5ldFgAAADqQNhHmX3rpJT3zzDMqKChQRkaGXnjhBY0YMcLsshq1PM+puUt2yemq8BxLdkQrOytN49OTTawMAAAAHYnpw2z+9Kc/adasWcrOzlZubq4yMjI0btw4FRYWml2aV8vznJr2Vm6dIC9JBa4KTXsrV8vznCZVBgAAgI7G9DD/3HPP6a677tLUqVOVlpamV155RTExMXrjjTfMLq2BarehuUt2yfByrubY3CW7VO321gIAAAAILFPDfFVVlbZs2aIxY8Z4jtntdo0ZM0br169v0L6yslIlJSV1vkJpU35xgx752gxJTleFNuUXh64oAAAAdFimhvmioiJVV1erZ8+edY737NlTBQUFDdrn5OTI4XB4vvr06ROqUiVJhaWNB/mWtAMAAABaw/RhNv6YPXu2XC6X5+vQoUMhff3ELtEBbQcAAAC0hqmr2XTv3l1hYWH67rvv6hz/7rvvlJSU1KB9VFSUoqKiQlVeAyNSEpTsiFaBq8LruHmbpCTHmWUqAQAAgGAztWc+MjJSw4cP12effeY55na79dlnnykzM9PEyrwLs9uUnZUm6Uxwr63mcXZWGuvNAwAAICRMH2Yza9Ysvfbaa3rzzTe1e/duTZs2TeXl5Zo6darZpXk1Pj1Z8yYPU5Kj7lCaJEe05k0exjrzAAAACBnTN4266aab9P3332vOnDkqKCjQBRdcoOXLlzeYFNuWjE9P1ti0JHaABQAAgKlshmFYdlH0kpISORwOuVwuxcXFmV0OAAAAEBC+5lzTh9kAAAAAaBnCPAAAAGBRhHkAAADAogjzAAAAgEUR5gEAAACLIswDAAAAFkWYBwAAACyKMA8AAABYFGEeAAAAsCjCPAAAAGBR4WYX0BqGYUg6s90tAAAA0F7U5NuavNsYS4f50tJSSVKfPn1MrgQAAAAIvNLSUjkcjkbP24zm4n4b5na7dfToUXXp0kU2my3kr19SUqI+ffro0KFDiouLC/nrwzzc+46J+95xce87Lu59x2X2vTcMQ6WlperVq5fs9sZHxlu6Z95ut6t3795ml6G4uDh+wTso7n3HxH3vuLj3HRf3vuMy89431SNfgwmwAAAAgEUR5gEAAACLIsy3QlRUlLKzsxUVFWV2KQgx7n3HxH3vuLj3HRf3vuOyyr239ARYAAAAoCOjZx4AAACwKMI8AAAAYFGEeQAAAMCiCPMAAACARRHmW+ill15S//79FR0drZEjR2rTpk1ml4RWWrNmjbKystSrVy/ZbDZ9+OGHdc4bhqE5c+YoOTlZnTp10pgxY7R37946bYqLizVp0iTFxcUpPj5ed955p8rKykL4LuCvnJwcXXTRRerSpYsSExN1/fXXa8+ePXXaVFRUaPr06erWrZs6d+6sf/u3f9N3331Xp83Bgwd17bXXKiYmRomJifrlL3+p06dPh/KtwE/z5s3TkCFDPBvCZGZm6uOPP/ac5753HE899ZRsNpseeOABzzHuf/v02GOPyWaz1fk699xzPeeteN8J8y3wpz/9SbNmzVJ2drZyc3OVkZGhcePGqbCw0OzS0Arl5eXKyMjQSy+95PX8008/rd/+9rd65ZVXtHHjRsXGxmrcuHGqqKjwtJk0aZJ27typFStWaOnSpVqzZo3uvvvuUL0FtMDq1as1ffp0bdiwQStWrNCpU6d09dVXq7y83NNm5syZWrJkid577z2tXr1aR48e1U9+8hPP+erqal177bWqqqrSl19+qTfffFMLFizQnDlzzHhL8FHv3r311FNPacuWLfrqq6901VVXaeLEidq5c6ck7ntHsXnzZv3ud7/TkCFD6hzn/rdfgwcPltPp9HytXbvWc86S992A30aMGGFMnz7d87i6utro1auXkZOTY2JVCCRJxuLFiz2P3W63kZSUZDzzzDOeY8ePHzeioqKMd955xzAMw9i1a5chydi8ebOnzccff2zYbDbjyJEjIasdrVNYWGhIMlavXm0Yxpn7HBERYbz33nueNrt37zYkGevXrzcMwzCWLVtm2O12o6CgwNNm3rx5RlxcnFFZWRnaN4BW6dq1q/H6669z3zuI0tJSIzU11VixYoVx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",
      "text/plain": [
       "<Figure size 900x500 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig,ax = plt.subplots(1,1)\n",
    "ax.set_xlabel(\"Plays\")\n",
    "ax.set_ylabel(\"Avg Reward\")\n",
    "fig.set_size_inches(9,5)\n",
    "rewards = [0]\n",
    "for i in range(500):\n",
    "    p = softmax(record[:,1],tau=0.7)\n",
    "    choice = np.random.choice(np.arange(n),p=p)\n",
    "    r = get_reward(probs[choice])\n",
    "    record = update_record(record,choice,r)\n",
    "    mean_reward = ((i+1) * rewards[-1] + r)/(i+2)\n",
    "    rewards.append(mean_reward)\n",
    "ax.scatter(np.arange(len(rewards)),rewards)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### Listing 2.9"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "class ContextBandit:\n",
    "    def __init__(self, arms=10):\n",
    "        self.arms = arms\n",
    "        self.init_distribution(arms)\n",
    "        self.update_state()\n",
    "        \n",
    "    def init_distribution(self, arms):\n",
    "        # Num states = Num Arms to keep things simple\n",
    "        self.bandit_matrix = np.random.rand(arms,arms)\n",
    "        #each row represents a state, each column an arm\n",
    "        \n",
    "    def reward(self, prob):\n",
    "        reward = 0\n",
    "        for i in range(self.arms):\n",
    "            if random.random() < prob:\n",
    "                reward += 1\n",
    "        return reward\n",
    "        \n",
    "    def get_state(self):\n",
    "        return self.state\n",
    "    \n",
    "    def update_state(self):\n",
    "        self.state = np.random.randint(0,self.arms)\n",
    "        \n",
    "    def get_reward(self,arm):\n",
    "        return self.reward(self.bandit_matrix[self.get_state()][arm])\n",
    "        \n",
    "    def choose_arm(self, arm):\n",
    "        reward = self.get_reward(arm)\n",
    "        self.update_state()\n",
    "        return reward"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import torch\n",
    "\n",
    "arms = 10\n",
    "N, D_in, H, D_out = 1, arms, 100, arms"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "3\n"
     ]
    }
   ],
   "source": [
    "env = ContextBandit(arms=10)\n",
    "state = env.get_state()\n",
    "reward = env.choose_arm(1)\n",
    "print(state)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "model = torch.nn.Sequential(\n",
    "    torch.nn.Linear(D_in, H),\n",
    "    torch.nn.ReLU(),\n",
    "    torch.nn.Linear(H, D_out),\n",
    "    torch.nn.ReLU(),\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "loss_fn = torch.nn.MSELoss()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "env = ContextBandit(arms)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [],
   "source": [
    "def one_hot(N, pos, val=1):\n",
    "    one_hot_vec = np.zeros(N)\n",
    "    one_hot_vec[pos] = val\n",
    "    return one_hot_vec"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "def running_mean(x,N=50):\n",
    "    c = x.shape[0] - N\n",
    "    y = np.zeros(c)\n",
    "    conv = np.ones(N)\n",
    "    for i in range(c):\n",
    "        y[i] = (x[i:i+N] @ conv)/N\n",
    "    return y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "def train(env, epochs=5000, learning_rate=1e-2):\n",
    "    cur_state = torch.Tensor(one_hot(arms,env.get_state())) #A\n",
    "    optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate)\n",
    "    rewards = []\n",
    "    for i in range(epochs):\n",
    "        y_pred = model(cur_state) #B\n",
    "        av_softmax = softmax(y_pred.data.numpy(), tau=2.0) #C\n",
    "        av_softmax /= av_softmax.sum() #D\n",
    "        choice = np.random.choice(arms, p=av_softmax) #E\n",
    "        cur_reward = env.choose_arm(choice) #F\n",
    "        one_hot_reward = y_pred.data.numpy().copy() #G\n",
    "        one_hot_reward[choice] = cur_reward #H\n",
    "        reward = torch.Tensor(one_hot_reward)\n",
    "        rewards.append(cur_reward)\n",
    "        loss = loss_fn(y_pred, reward)\n",
    "        optimizer.zero_grad()\n",
    "        loss.backward()\n",
    "        optimizer.step()\n",
    "        cur_state = torch.Tensor(one_hot(arms,env.get_state())) #I\n",
    "    return np.array(rewards)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [],
   "source": [
    "rewards = train(env)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x7f91a975c100>]"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(running_mean(rewards,N=500))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
